Énumération
Une énumération est un type de données défini par l'utilisateur composé d'une liste de membres séparés par des virgules (valeurs d'énumération) permettant de déclarer des variables définies par l'utilisateur.
Vous déclarez une énumération dans DUT objet, que vous avez déjà créé dans le projet en cliquant Ajouter un objet.
Dans le code de l'application, vous pouvez utiliser les membres d'énumération comme des constantes dont l'identifiant <enumeration name>.<member name>
est reconnu globalement dans le projet.
Pour plus d'informations, voir : DUT
Déclaration
Syntaxe
{attribute 'strict'}
TYPE <enumeration name> :
(
<member name> := <value>
) <base data type> := <initialization> ;
END_TYPE
| Facultatif Le pragma a pour effet d'effectuer un test de type strict comme décrit ci-dessous. Le pragma est facultatif, mais recommandé. |
| Nom de l'énumération qui peut être utilisée dans le code comme type de données Exemple : |
| N'importe quel nombre de membres, mais au moins deux membres Une énumération est une liste de noms de membres séparés par des virgules entre crochets. Le dernier membre avant le crochet fermant n'a pas besoin de virgule. Tous les membres ont le même type de données. Les valeurs des membres sont automatiquement initialisées : à partir de 0, les valeurs sont continuellement incrémentées de 1. Vous pouvez également attribuer explicitement une valeur initiale fixe aux membres individuels. Exemple : |
| Facultatif Vous pouvez attribuer explicitement l'un des types de données de base suivants :
Par défaut : |
| Facultatif L'un des membres peut être explicitement déclaré comme membre initial. Par défaut : si aucune initialisation n'est explicitement spécifiée, l'initialisation est automatiquement effectuée avec le membre supérieur. |
{attribute 'qualified_only'} {attribute 'strict'} TYPE COLOR_BASIC : ( yellow, green, blue, black ) // Basic data type is INT, default initialization for all COLOR_BASIC variables is yellow ; END_TYPE
Énumération avec type de données de base explicite
Extensions de la norme IEC 61131-3
Le type de données de base pour une déclaration d'énumération est INT
par défaut. Cependant, vous pouvez également déclarer des énumérations qui sont basées explicitement sur un autre type de données entier.
Énumération avec type de données de base DWORD
TYPE COLOR : ( white := 16#FFFFFF00, yellow := 16#FFFFFF00, green := 16#FF00FF00, blue := 16#FF0000FF, black := 16#88000000 ) DWORD := black ; // Basic data type is DWORD, default initialization for all COLOR variables is black END_TYPE
Règles de programmation strictes
Important
Dans CODESYS V3.5 SP7 et versions supérieures, le pragma {attribute 'strict'}
est ajouté automatiquement dans la première ligne lors de la déclaration d'une énumération.
Les règles de programmation strictes sont activées lors de l'ajout du pragma {attribute 'strict'}
.
Opérations arithmétiques avec des membres d'énumération
Par exemple, une variable d'énumération ne peut pas être utilisée comme variable de compteur dans un
FOR
boucle.Affectation d'une valeur constante, qui ne correspond pas à une valeur d'énumération, à un membre de l'énumération
Affectation d'une variable non constante, qui possède un autre type de données que l'énumération, à un membre de l'énumération
Les opérations arithmétiques peuvent entraîner l'attribution de valeurs non déclarées aux membres de l'énumération. Un meilleur style de programmation est d'utiliser SWITCH
/CASE
instructions pour le traitement des valeurs des membres.
Déclaration et initialisation des variables d'énumération
Syntaxe
<variable name> : <enumeration name> := <initialization> ;
Dans le cas d'une déclaration d'une variable d'énumération avec une énumération définie par l'utilisateur, la variable peut être initialisée avec un membre d'énumération.
PROGRAM PLC_PRG VAR colorCar: COLOR; colorTaxi : COLOR := COLOR.yellow; END_VAR
La variable colorCar
est initialisé avec COLOR.black
. Il s'agit de l'initialisation par défaut pour toutes les variables d'énumération COLOR
et défini de cette façon dans la déclaration de type. La variable colorTaxi
possède sa propre initialisation.
Si aucune initialisation n'est spécifiée, la valeur d'initialisation est 0.
PROGRAM PLC_PRG VAR cbFlower : COLOR_BASIC; cbTree: COLOR_BASIC := COLOR_BASIC.green; END_VAR
La variable cbFlower
est initialisé avec COLOR_BASIC.yellow
. Il s'agit de l'initialisation par défaut pour toutes les variables d'énumération COLOR_BASIC
. Comme la déclaration d'énumération ne spécifie pas de membre à initialiser, le système s'initialise automatiquement avec le membre dont la valeur est 0. Il s'agit généralement du premier des membres de l'énumération. Cependant, il peut également s'agir d'un autre membre qui n'est pas en première position, mais qui est explicitement initialisé avec 0.
La variable cbTree
possède une initialisation explicite.
Si aucune valeur n'est spécifiée à la fois pour le type et pour la variable, la règle suivante s'applique : Si une énumération contient une valeur pour 0, cette valeur est l'initialisation par défaut, sinon, le premier membre de la liste.
Initialisation avec le membre 0
TYPE ENUM : ( e1 := 2, e2 := 0, e3 ) ; END_TYPE PROGRAM PLC_PRG VAR e : ENUM; END_VAR
La variable e
est initialisé avec ENUM.e2
.
Initialisation avec le premier membre
TYPE ENUM2 : ( e1 := 3, e2 := 1, e3 ) ; END_TYPE PROGRAM PLC_PRG VAR e2 : ENUM2; END_VAR
La variable e2
est initialisé avec ENUM.e1
.
Accès unique aux membres du recensement
Extensions de la norme IEC 61131-3
Les membres d'énumération peuvent également être utilisés comme variables constantes avec l'identifian <enumeration name>.<member name>
. Les membres d'énumération sont reconnus globalement dans le projet et leur accès est unique. Par conséquent, un nom de membre peut être utilisé dans différentes énumérations.
Membre : blue
PROGRAM PLC_PRG VAR cbFlower : COLOR_BASIC; colorCar : COLOR; END_VAR (* unambiguous identifiers although the component names are identical *) cbFlower := COLOR_BASIC.blue; colorCar := COLOR.blue; (* invalid code *) cbFlower := blue; colorCar := blue;
Pour plus d'informations, voir : Espace de noms d'énumération.